home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1984-04-24 | 3.8 KB | 160 lines |
- 10 ' *** Othello ***
- 20 ' 5/15/82
- 30 'Translated from a TRS-80 Version
- 40 '
- 50 SCREEN 1,0
- 60 KEY OFF
- 70 COLOR 1,0
- 80 CLS
- 90 DEFINT A-Z
- 100 DIM BOX(64),A(50),B(50),C(8002)
- 110 DEF FNR(X)=INT(RND*X+1)
- 120 S$=SPACE$(39)
- 130 RANDOMIZE VAL (MID$(TIME$,4,2))*VAL (RIGHT$(TIME$,2))-VAL(RIGHT$(TIME$,2))^2
- 140 LINE (0,0)-(19,18),1,BF
- 150 GET (0,0)-(19,18),A
- 160 LINE (0,0)-(19,18),2,BF
- 170 LINE (6,6)-(13,12),0,BF
- 180 GET (0,0)-(19,18),B
- 190 CLS
- 200 FOR X= 75 TO 243 STEP 21
- 210 LINE (X,0)-(X,160),3
- 220 NEXT
- 230 FOR Y= 0 TO 160 STEP 20
- 240 LINE (75,Y)-(243,Y),3
- 250 NEXT
- 260 FOR K=1 TO 64
- 270 LOCATE 1,1
- 280 PRINT RIGHT$(STR$(K),2);
- 290 GET (0,0)-(15,7),C
- 300 Y=INT((K-1)/8):X=K-8*Y
- 310 PUT ((X-1)*21+78,Y*20+6),C
- 320 NEXT
- 330 LOCATE 1,1:PRINT" ";
- 340 GET (0,0)-(319,199),C
- 350 CLS
- 360 FOR X=1 TO 64:BOX(X)=0:NEXT
- 370 BOX(28)=1:BOX(37)=1
- 380 BOX(29)=-1:BOX(36)=-1
- 390 GOTO 530
- 400 ' subroutine to draw the boxes
- 410 SCOREA=0:SCOREB=0:FOR KB=1 TO 64
- 420 IF BOX(KB)=0 THEN 470
- 430 YB=INT((KB-1)/8):XB=KB-8*YB
- 440 IF BOX(KB)=1 THEN 450 ELSE 460
- 450 PUT ((XB-1)*21+76,YB*20+1),A,PSET:SCOREA=SCOREA+1:GOTO 470
- 460 PUT ((XB-1)*21+76,YB*20+1),B,PSET:SCOREB=SCOREB+1
- 470 NEXT KB
- 480 LOCATE 19,3:PRINT RIGHT$(STR$(SCOREA),2):LOCATE 19,35:PRINT RIGHT$(STR$(SCOREB),2)
- 490 RETURN
- 500 '
- 510 FOR X=1 TO 2000:NEXT :RETURN
- 520 LOCATE 22,1:PRINT S$;:LOCATE 22,11:RETURN
- 530 K=FNR(2):B$="I"
- 540 LOCATE 1,17:PRINT"OTHELLO":PRINT:PRINT "1 or 2 Players ";
- 550 J$=INKEY$:IF J$=""THEN 550 ELSE J=VAL (J$)
- 560 IF J<1 OR J>2 THEN BEEP:GOTO 550 ELSE PRINT J
- 570 PRINT:INPUT "What is your name ";A$
- 580 F=1:IF J=2 THEN 610
- 590 CLS:PUT (0,0),C
- 600 ON K GOTO 620,630
- 610 PRINT:INPUT "and your opponent's name ";B$:GOTO 590
- 620 LOCATE 14,1:PRINT A$;:LOCATE 14,33:IF B$="I"THEN PRINT"IBM":GOTO 640:ELSE PRINT B$:GOTO 640
- 630 LOCATE 14,33:PRINT A$;:LOCATE 14,1:IF B$="I"THEN PRINT"IBM"ELSE PRINT B$
- 640 PUT (0,112),A:PUT (256,112),B
- 650 LOCATE 18,1:PRINT"Score":LOCATE 18,33:PRINT"Score"
- 660 GOSUB 400
- 670 GOTO 1060
- 680 GOSUB 400:LOCATE 22,11:PRINT A$", ";:GOTO 730
- 690 GOSUB 400:LOCATE 22,11:PRINT B$", ";:GOTO 730
- 700 GOSUB 520:GOSUB 400:LOCATE 22,7:PRINT"My turn. I'm thinking maybe"
- 710 GOSUB 1180:RESTORE:IF R=0 THEN 680
- 720 GOSUB 520:PRINT "and I will play"T:Z=T:E=0:GOTO 790
- 730 I$="":Z$="":INPUT "select or pass";Z$:GOSUB 520
- 740 Z=VAL (Z$):IF Z$<>"R" AND Z$<>"r" THEN 750
- 750 GOSUB 520:IF Z$="p" OR Z$="P" THEN 1010
- 760 IF Z>0 AND Z<65 THEN 780
- 770 BEEP:PRINT"No such square!!":GOSUB 510:GOSUB 520:GOTO 1060
- 780 IF BOX(Z)<>0 THEN 810
- 790 W=0:L=0:E=0:GOSUB 820:IF W=0 THEN 1060
- 800 F=-F:GOTO 1060
- 810 BEEP:PRINT"Square occupied !!":GOSUB 510:GOSUB 520:GOTO 1060
- 820 D=1:GOSUB 850:D=-1:GOSUB 850:FOR D=7 TO 9:GOSUB 850:NEXT D:FOR D=-9 TO -7:GOSUB 850:NEXT D
- 830 IF E<>1 THEN 1470
- 840 RETURN
- 850 G=Z+D
- 860 IF G<1 THEN RETURN
- 870 IF G>64 THEN RETURN
- 880 IF BOX(G)=F THEN RETURN
- 890 IF BOX(G)=0 THEN RETURN
- 900 IF ABS(D)=8 THEN 930
- 910 IF INT(G/8)=G/8 THEN RETURN
- 920 IF INT((G-1)/8)=(G-1)/8 THEN RETURN
- 930 G=G+D:IF G<1 THEN RETURN
- 940 IF G>64 THEN RETURN
- 950 IF BOX(G)=F THEN 970
- 960 GOTO 890
- 970 Y=0:W=1:IF E=1 THEN 1000
- 980 IF L=1 THEN RETURN
- 990 FOR X=G-D TO Z+D STEP -D:BOX(X)=F:NEXT:RETURN
- 1000 FOR X=G-D TO Z+D STEP -D:Q=Q+1:NEXT X:RETURN
- 1010 W=0:L=1:FOR Z=1 TO 64:IF BOX(Z)<>0 THEN 1030
- 1020 GOSUB 820:IF W=1 THEN 1050
- 1030 NEXT Z:IF Y=1 THEN 1530
- 1040 Y=1:F=-F:GOTO 1060
- 1050 BEEP:PRINT"You can play at"Z;:GOSUB 510
- 1060 IF J=1 THEN 1100
- 1070 IF F=1 THEN 1130
- 1080 IF K=1 THEN 690
- 1090 GOTO 680
- 1100 IF F=1 THEN 1150
- 1110 IF K=1 THEN 700
- 1120 GOTO 680
- 1130 IF K=1 THEN 680
- 1140 GOTO 690
- 1150 IF K=1 THEN 680
- 1160 GOTO 700
- 1170 CLS:GOTO 670
- 1180 R=0:T=0:E=1
- 1190 FOR P=28 TO 1 STEP -1:IF BOX(P)<>0 THEN I=P-9
- 1200 NEXT P:FOR P=37 TO 64:IF BOX(P)<>0 THEN O=P+9
- 1210 NEXT P:FOR P=1 TO 4:READ Z:IF BOX(Z)<>0 THEN 1240
- 1220 IF (Z<I)+(Z>O) THEN 1240
- 1230 GOSUB 1410:IF Q<>0 THEN 1380
- 1240 NEXT P:R=0:FOR P=1 TO 12:READ A,B,N,M:FOR Z=A TO B STEP N
- 1250 IF BOX(Z)<>0 THEN 1330
- 1260 IF (Z<I)+(Z>O) THEN 1340
- 1270 GOSUB 1410:IF Q=0 THEN 1330
- 1280 IF Q*M>R THEN 1310
- 1290 IF Q*M=R THEN 1320
- 1300 GOTO 1330
- 1310 R=Q*M:T=Z:GOTO 1330
- 1320 IF FNR(3)=2 THEN T=Z
- 1330 NEXT Z
- 1340 NEXT P:IF R<>0 THEN RETURN
- 1350 FOR P=1 TO 12:READ Z:IF BOX(Z)<>0 THEN 1370
- 1360 GOSUB 1410:IF Q<>0 THEN 1380
- 1370 NEXT P:GOTO 1390
- 1380 R=Q:T=Z:RETURN
- 1390 PRINT"I must pass":IF Y=1 THEN 1530
- 1400 Y=1:F=-F:GOSUB 510:RETURN
- 1410 N=T:IF T=0 THEN N=Z
- 1420 Q=0:LOCATE 22,34:PRINT N;:GOSUB 820:RETURN
- 1430 DATA 1,8,57,64,3,6,1,3,24,48,8,3,59,62,1,3,17,41,8,3
- 1440 DATA 11,14,1,1,23,47,8,1,51,54,1,1,18,42,8,1
- 1450 DATA 19,22,1,2,27,30,1,2,35,38,1,2,43,46,1,2
- 1460 DATA 2,16,63,49,7,56,58,9,10,15,55,50
- 1470 IF L=1 THEN RETURN
- 1480 IF W=1 THEN 1500
- 1490 BEEP:PRINT"Illegal move !!";:GOSUB 510:GOSUB 520:RETURN
- 1500 BOX(Z)=F
- 1510 FOR X=1 TO 64:IF BOX(X)=0 THEN RETURN
- 1520 NEXT X
- 1530 GOSUB 520:GOSUB 400:PRINT"Game over"
- 1540 LOCATE 23,11:PRINT "Play again ?";
- 1550 A$=INKEY$:IF A$=""THEN 1550
- 1560 IF A$=CHR$(13) OR A$="Y" OR A$="y" THEN RUN
- 1570 WIDTH 80
- 1580 SCREEN 0,1:COLOR 4,0,0:CLS
- 1590 LOCATE 12,1:PRINT "OTHELLO.BAS Terminated. Hope you had fun!"
-